Computer display sharing techniques are becoming popular. In general, display sharing enables the display of one computer to also be displayed (shared) on one or more other computers. Computers may be communicatively coupled via a communication network, and certain computers may “share” another computer to which they are communicatively coupled. Display sharing aids collaboration among various users, for example, because the users can see a common display on their respective computers. Various software applications are available for performing display sharing, e.g., the Netmeeting product available from Microsoft, and the ASAP Express and ASAP Pro products available from Convoq.
Remote desktop sharing enables users to call a remote computer to access its shared desktop and applications. In this sense, remote need not be physically distant, but may be a separate computer that is communicatively coupled to the given computer. Thus, for example, a user may operate their office computer from home or vice-versa. Similarly, multiple users in a single conference room may each have computers (e.g., laptops) and may share a display to aid in their collaboration during a meeting. Accordingly, such “remote” computer may be referred to herein as a “guest” computer, which shares the display of a “host” computer. The “host” computer refers to the computer on which an application is executing for generating the information to be displayed on the host and guest computers. In some instances, a computer may act as a “guest” for all or part of one display-sharing session, and it may act as a “host” for all or part of another display-sharing session.
In certain display sharing applications, a host computer may run applications, receive user input, etc., and one or more guest computers may display the display of the host computer. In certain display sharing applications, the guest computer(s) may communicate information to the host computer to interact with an application executing on the host computer, etc., just as a local user may interact directly with the host computer.
In display sharing, it is desirable to maintain the displays of the host and guest computers synchronized. That is, when a display of the host computer changes, the guest computer's display should change accordingly to keep the displays synchronized. Of course, some amount of delay generally exists in this synchronization, as the updated information is communicated over a communication network.
A known technique for enabling such synchronization is provided by the Microsoft Windows Graphics Device Interface (GDI), which copies drawing operations to a mirror driver as well as to the actual graphics hardware of the host computer (for rendering the graphics on the host computer's display). Thus, the mirror driver sees all of the same drawing operations that a real graphics device sees via GDI. The mirror driver uses the information from these operations to construct a list of regions that have changed on the display. Accordingly, the mirror driver can use this information to synchronize the display(s) of any guest(s) that may be sharing the host computer's display.
However, GDI only handles two-dimensional (2D) graphics operations. Three-dimensional (3D) drawing applications, such as OpenGL, communicate graphics operations (e.g., drawing commands) via a different communication path than 2D graphics operations. For efficiency concerns, 3D drawing applications generally communicate directly to the graphics hardware, and do not communicate their operations through GDI, and thus the operations are not copied to the mirror driver. Therefore, difficulty arises in maintaining synchronized displays between a host and guest when a 3D drawing application is being used.
Other instances may arise in the prior art wherein a graphics call (e.g., of a 2D or 3D graphics application) to the graphics interface of the operating system (OS) of a host computer does not trigger synchronization of a guest computer's display. For instance, the host computer's OS may have a graphics interface that does not trigger synchronization of a guest computer's display for 2D and/or 3D graphics calls. Therefore, difficulty arises in maintaining synchronized displays between a host and a guest.